package com.senmin.aPrinciple.a6DemeterPriciple.tdemo1;

import java.util.ArrayList;
import java.util.List;

/**
 * @className: demeter1
 * @author: xpj
 * @create: 2021/6/5
 * @description: 使用迪米特法则进行改进
 *  案例：有一个学校，下属在各个学院和总部，现要求打印出学校总部员工ID和学院员工ID
 */
public class demeter1 {
    public static void main(String[] args) {
        System.out.println("使用迪米特法则进行改进……");
        //创建了一个SchoolManager对象
        SchoolManager schoolManager = new SchoolManager();
        //输出学院的员工id和学校总部的员工id
        schoolManager.printAllEmployee(new CollegeManager());

    }

    /**
     * 学校总部员工类
     */
    static class Employee {
        private String id;
        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }
    }

    /**
     * 学校学院员工类
     */
    static class CollegeEmployee{
        private String id;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }
    }


    /**
     * 管理学院员工管理类
     */
    static class CollegeManager{
         //获取所有学院员工ID
         public List<CollegeEmployee> getCollegeEmployee(){
             List<CollegeEmployee> list = new ArrayList<CollegeEmployee>();
             for(int i=0;i<10;i++){
                 CollegeEmployee emp = new CollegeEmployee();
                 emp.setId("学院员工ID："+i);
                 list.add(emp);
             }
            return list;
         }

        public void printCollegeEmployee(){
              List<CollegeEmployee> list1 = this.getCollegeEmployee();
              System.out.println("-----------打印学院员工------------");
              for(CollegeEmployee e : list1){
                  System.out.println(e.getId());
              }
        }
    }

    /**
     * 管理学校总部员工管理类
     * 分析SchoolManager类的直接朋友有那些：（）
     * 1.方法参数：Employee类
     * 2.方法参数：CollegeManager类
     */
    static class SchoolManager{
        //获取所有学校总部员工ID
        public List<Employee> getAllEmployee(){
            List<Employee> list =new ArrayList<Employee>();
            for(int i=0;i<5;i++){
                Employee emp = new Employee();
                emp.setId("学校总部员工ID："+i);
                list.add(emp);
            }
            return list;
        }

        void printAllEmployee(CollegeManager sub){

            //分析问题：
            // 1.CollegeEmployee类，不是SchoolManager类的直接朋友，
            // 2.CollegeEmployee类,是以局部变量的方式出现在SchoolManager类中，
            // 3.这样就违背了迪米特法则了。
            //解决问题：将一下注释的代码（输出学院的员工），封装到CollegeManager中，使用sub.printCollegeEmployee();调用
            sub.printCollegeEmployee();
            /*List<CollegeEmployee> list1 = sub.getALLEmployee();
            System.out.println("-----------打印学院员工------------");
            for(CollegeEmployee e : list1){
                System.out.println(e.getId());
            }*/

            List<Employee> list2 =this.getAllEmployee();
            System.out.println("-----------打印学校总部员工------------");
            for(Employee e :list2){
                System.out.println(e.getId());
            }

        }
    }



}
